/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utils;

import conexion.HibSession;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.sql.Connection;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;

import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import org.hibernate.Hibernate;
import org.hibernate.Session;

//import org.jboss.seam.ScopeType;
//import org.jboss.seam.annotations.Logger;
//import org.jboss.seam.annotations.Name;
//import org.jboss.seam.annotations.Scope;
//import org.jboss.seam.annotations.web.RequestParameter;
//import org.jboss.seam.log.Log;
/**
 *
 * @author Elvia
 */
@ManagedBean
//@SessionScoped
public class GeneraReporte implements Serializable {

    public void generaPdf(String nombreReporte, Map parametrosReporte, String nombreReporteGenerar) {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

//        InitialContext ic = null;
//        try {
//            ic = new InitialContext();
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }
////        DataSource ds = null;
//        try {
//            ds = (DataSource) ic.lookup("inpcDatasource");
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }
        OutputStream out = null;
        Session con = null;

        try {
            con = HibSession.abrirSesion();
            JasperReport jasperReport = null;
            try {
                String archivo = FacesUtils.getExternalContext().getRealPath("/resources/reportes/" + nombreReporte + ".jasper");
                jasperReport = (JasperReport) JRLoader.loadObject(archivo);

            } catch (JRException e) {
                e.printStackTrace();
            }

//			JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Arial");
//			JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "Arial");
            ByteArrayInputStream fichero = null;
            fichero = new ByteArrayInputStream(JasperRunManager.runReportToPdf(jasperReport, parametrosReporte, con.connection()));
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", "inline; filename="
                    + nombreReporteGenerar + ".pdf");
            response.setHeader("Cache-Control", "max-age=30");
            response.setHeader("Pragma", "No-cache");
            response.setDateHeader("Expires", 0);

            PrintWriter pw = response.getWriter();
            //Escribir en bloques y no todo el contenido
            byte[] buf = new byte[1024];
            int len;
            while ((len = fichero.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            fichero.close();
            out.flush();
            out.close();
        } catch (JRException ex) {
            Logger.getLogger(GeneraReporte.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (Exception eq) {
            eq.printStackTrace();
        } finally {
            HibSession.cerrarSesion();
        }

        context.responseComplete();
    }

    public void generaPdfListado(String nombreReporte, Class clase, Map parametrosReporte, String nombreReporteGenerar) {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//
//        InitialContext ic = null;
//        try {
//            ic = new InitialContext();
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }
//        DataSource ds = new DataSource();
//        try {
//            ds = (DataSource) ic.lookup("inpcDatasource");
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }

        OutputStream out = null;
//        Session con = null;

        try {
//            con = HibSession.abrirSesion();
            JasperReport jasperReport = null;
            try {
                String archivo = FacesUtils.getExternalContext().getRealPath("reportes/" + nombreReporte + ".jasper");
                jasperReport = (JasperReport) JRLoader.loadObject(archivo);

            } catch (JRException e) {
                e.printStackTrace();
            }

//			JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Arial");
//			JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "Arial");
            Session session = HibSession.abrirSesion();
            ByteArrayInputStream fichero = null;
            fichero = new ByteArrayInputStream(JasperRunManager.runReportToPdf(jasperReport, parametrosReporte, session.connection()));

            response.setContentType("application/vnd.ms-pdf");
            response.setHeader("Content-disposition", "inline; filename="
                    + nombreReporteGenerar + ".pdf");
            response.setHeader("Cache-Control", "max-age=30");
            response.setHeader("Pragma", "No-cache");
            response.setDateHeader("Expires", 0);
            out = response.getOutputStream();
            //Escribir en bloques y no todo el contenido
            byte[] buf = new byte[1024];
            int len;
            while ((len = fichero.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            fichero.close();
            out.flush();
            out.close();
        } catch (JRException ex) {
            Logger.getLogger(GeneraReporte.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (Exception eq) {
            eq.printStackTrace();
        } finally {
            HibSession.cerrarSesion();
        }

        context.responseComplete();
    }

    public void generaPdfListado(List lstDatos, String nombreReporte, Class clase, Map parametrosReporte, String nombreReporteGenerar) {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//
//        InitialContext ic = null;
//        try {
//            ic = new InitialContext();
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }
//        DataSource ds = new DataSource();
//        try {
//            ds = (DataSource) ic.lookup("inpcDatasource");
//        } catch (NamingException e1) {
//            e1.printStackTrace();
//        }

        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lstDatos);

        OutputStream out = null;
//        Session con = null;

        try {
//            con = HibSession.abrirSesion();
            JasperReport jasperReport = null;
            try {
                String archivo = FacesUtils.getExternalContext().getRealPath("/resources/reportes/" + nombreReporte + ".jasper");
                jasperReport = (JasperReport) JRLoader.loadObject(archivo);

            } catch (JRException e) {
                e.printStackTrace();
            }

//			JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Arial");
//			JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "Arial");
            ByteArrayInputStream fichero = null;
            fichero = new ByteArrayInputStream(JasperRunManager.runReportToPdf(jasperReport, parametrosReporte, ds));
            response.setContentType("application/vnd.ms-pdf");
            response.setHeader("Content-disposition", "inline; filename="
                    + nombreReporteGenerar + ".pdf");
            response.setHeader("Cache-Control", "max-age=30");
            response.setHeader("Pragma", "No-cache");
            response.setDateHeader("Expires", 0);
            out = response.getOutputStream();
            //Escribir en bloques y no todo el contenido
            byte[] buf = new byte[1024];
            int len;
            while ((len = fichero.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            fichero.close();
            out.flush();
            out.close();
        } catch (JRException ex) {
            Logger.getLogger(GeneraReporte.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (Exception eq) {
            eq.printStackTrace();
        } finally {
//            if (con != null) {
//                con.close();
//            }
        }

        context.responseComplete();
    }
}
